const { Controller } = require("egg");

class HomeController extends Controller {
    /**
     * 欢迎页
     */
    async index() {
        this.ctx.body = "Hi, egg ~";
    }

    /**
     * 登录
     */
    async login() {
        // 获取参数
        const { username, password } = this.ctx.request.body;
        // 非空校验
        if (!username || !password) {
            this.ctx.body = {
                code: 400,
                message: "缺少必须参数",
            };
            return;
        }
        // 根据用户名，从数据库查询该用户信息
        let user = await this.service.user.findByUsername(username);
        // 判断用户是否存在
        if (!user) {
            this.ctx.body = {
                code: 404,
                message: "用户未注册",
            };
            return;
        }
        // 判断密码是否正确
        if (user.password !== this.ctx.helper.passwordEncoder(password)) {
            this.ctx.body = {
                code: 400,
                message: "用户密码不匹配",
            };
            return;
        }
        // 去除敏感字段
        delete user.password;
        // 登录成功，生成 token
        const token = this.ctx.helper.genToken({ ...user });
        // 返回给客户端保存该 token
        this.ctx.body = {
            code: 200,
            data: {
                user,
                token,
            },
            message: "登录成功",
        };
    }

    /**
     * 注册
     */
    async register() {
        // 获取参数
        const { username, password, nickname } = this.ctx.request.body;

        // 非空校验
        if (!username || !password || !nickname) {
            this.ctx.body = {
                code: 400,
                message: "缺少必须参数",
            };
            return;
        }

        // 用户唯一性校验
        const user = await this.service.user.findByUsername(username);

        // 判断是不是已经存在该用户了
        if (user) {
            this.ctx.body = {
                code: 403,
                message: "该用户已注册",
            };
            return;
        }

        // 保存到数据库中
        const res = await this.service.user.create({
            username,
            password,
            nickname,
        });

        // 判断是否添加成功
        if (res.affectedRows !== 1) {
            this.ctx.body = {
                code: 500,
                message: "用户注册失败，请稍后再试",
            };
            return;
        }

        // 添加成功
        this.ctx.body = {
            code: 201,
            message: "用户注册成功",
        };
    }
}

module.exports = HomeController;
